package kotlincore.chapt02.高阶函数和Lambda.函数Lambda和闭包

class test {
}

fun main() {
    //管是用val还是fun，如果是等号加花括号的语法，那么构建的就是一个Lambda表达式
    //Lambda的参数在花括号的内部声明。所以，如果左侧是fun，那么就是Lambda表达式
    //函数体，也必须通过()或invoke来调用Lambda，如
    val foo = {x:Int,y:Int -> x + y}
    foo(1,2)
    foo.invoke(1,2)

    fun foo(x:Int)= {y:Int -> x + y }
    foo(1).invoke(2)
    foo(1)(2)


    //一个闭包可以被当作参数传递或者直接使用，它可以简单地看看成"访问外部环境变量的函数"
    //与java不一样的地主， Kotlin中的竭不仅可以访问外部变量，琮能够对其进行修改。
    var sum = 0
    listOf(1,2,3).filter { it > 0 }.forEach {
        sum += it
    }
    println(sum)
}